﻿using Loogn.DataAccess;
using Loogn.DBTest.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Loogn.DBTest.DAL
{
    public class UserDAL:UserDALBase<UserInfo>
    {
        //这里可以什么都没有，如果你不想用默认的反射(也是有缓存的)填充，可以用如下的方式重写ReaderToModel方法
        //protected override UserInfo ReaderToModel(System.Data.SqlClient.SqlDataReader reader)
        //{
        //    var info = new UserInfo();
        //    for (int i = 0; i < reader.FieldCount; i++)
        //    {
        //        var n = reader.GetName(i).ToUpper();
        //        switch (n)
        //        {
        //            case "ID":
        //                info.ID = reader.GetInt32(i);
        //                break;
        //            case "NAME":
        //                info.Name = reader.GetString(i);
        //                break;
        //            case "SEX":
        //                info.Sex = reader.GetBoolean(i);
        //                break;
        //            case "AGE":
        //                info.Age = reader.GetByte(i);
        //                break;
        //            case "DATE":
        //                info.Date = reader.GetDateTime(i);
        //                break;
        //            case "REMARK":
        //                info.Remark = reader.GetString(i);
        //                break;
        //            default:
        //                break;
        //        }
        //    }
        //    return info;
        //}

        /// <summary>
        /// 这里是测试事务的
        /// </summary>
        public void TransTest()
        {
            using (var conn = NewConnection())
            {
                conn.Open();
                var trans=conn.BeginTransaction();
                try
                {
                    //task1
                    SqlHelper.ExecuteNonQuery(trans, System.Data.CommandType.Text, "update [user] set name='aaa' where ID=1");
                    //task2
                    SqlHelper.ExecuteNonQuery(trans, System.Data.CommandType.Text, "update [user] set name='cccc' where ID=@id", CreateParameter("@id", 2));
                    //task......
                    trans.Commit();
                    Console.WriteLine("Trans Commit");
                }
                catch
                {
                    trans.Rollback();
                    Console.WriteLine("Trans Rollback");
                }
            }
        }
    }
}
